aboutsummaryrefslogtreecommitdiff
path: root/src/app/manga/[title]/[id]
diff options
context:
space:
mode:
authorzephex <[email protected]>2024-04-20 13:34:53 +0530
committerzephex <[email protected]>2024-04-20 13:34:53 +0530
commitd6780cf3dad729c69a102ba2940188cf1e6bcbf4 (patch)
treed10a2aefef6664c42439f165c73722c514b032bc /src/app/manga/[title]/[id]
parentfeature added: tracker for mangas (diff)
downloaddramalama-d6780cf3dad729c69a102ba2940188cf1e6bcbf4.tar.xz
dramalama-d6780cf3dad729c69a102ba2940188cf1e6bcbf4.zip
idk whats happening
Diffstat (limited to 'src/app/manga/[title]/[id]')
-rw-r--r--src/app/manga/[title]/[id]/[read]/currentReading.jsx68
-rw-r--r--src/app/manga/[title]/[id]/[read]/download.jsx42
-rw-r--r--src/app/manga/[title]/[id]/[read]/page.jsx112
-rw-r--r--src/app/manga/[title]/[id]/[read]/read.module.css128
-rw-r--r--src/app/manga/[title]/[id]/buttons.jsx108
-rw-r--r--src/app/manga/[title]/[id]/info.module.css446
-rw-r--r--src/app/manga/[title]/[id]/page.jsx272
7 files changed, 588 insertions, 588 deletions
diff --git a/src/app/manga/[title]/[id]/[read]/currentReading.jsx b/src/app/manga/[title]/[id]/[read]/currentReading.jsx
index 0050d61..5205ea9 100644
--- a/src/app/manga/[title]/[id]/[read]/currentReading.jsx
+++ b/src/app/manga/[title]/[id]/[read]/currentReading.jsx
@@ -1,34 +1,34 @@
-"use client";
-
-import styles from "./read.module.css";
-import { useEffect } from "react";
-
-function get_current_info(title) {
- let req = {};
-
- useEffect(() => {
- const data = JSON.parse(localStorage.getItem("mangaData"));
- data.watchHis.forEach((element) => {
- if (element.title === title) {
- req.chapter = element.chapter;
- req.volume = element.volume;
- }
- });
- }, []);
-
- return req || false;
-}
-
-export default function Current({ name: title }) {
- let data = get_current_info(title);
- if (!data) {
- return;
- }
-
- return (
- <section className={styles.CurrentMain}>
- <p className={styles.CurrentChapter}>{data.chapter}</p>
- <p className={styles.CurrentVolume}>{data.volume}</p>
- </section>
- );
-}
+"use client";
+
+import styles from "./read.module.css";
+import { useEffect } from "react";
+
+function get_current_info(title) {
+ let req = {};
+
+ useEffect(() => {
+ const data = JSON.parse(localStorage.getItem("mangaData"));
+ data.watchHis.forEach((element) => {
+ if (element.title === title) {
+ req.chapter = element.chapter;
+ req.volume = element.volume;
+ }
+ });
+ }, []);
+
+ return req || false;
+}
+
+export default function Current({ name: title }) {
+ let data = get_current_info(title);
+ if (!data) {
+ return;
+ }
+
+ return (
+ <section className={styles.CurrentMain}>
+ <p className={styles.CurrentChapter}>{data.chapter}</p>
+ <p className={styles.CurrentVolume}>{data.volume}</p>
+ </section>
+ );
+}
diff --git a/src/app/manga/[title]/[id]/[read]/download.jsx b/src/app/manga/[title]/[id]/[read]/download.jsx
index e7a20ee..bddf6d3 100644
--- a/src/app/manga/[title]/[id]/[read]/download.jsx
+++ b/src/app/manga/[title]/[id]/[read]/download.jsx
@@ -1,21 +1,21 @@
-"use client";
-
-import styles from "./read.module.css";
-
-export default function DownloadManga({ chapterId: id }) {
- return (
- <div className={styles.DownloadMain}>
- <a
- href={`https://manga-downloader-7nca.onrender.com/download?id=${id}`}
- style={{ textDecoration: "none" }}
- onClick={() =>
- alert(
- "Downloads are not instant. It might take some time to prepare your file. Thank you for your patience"
- )
- }
- >
- <button title="should work just fine">Download - Beta</button>
- </a>
- </div>
- );
-}
+"use client";
+
+import styles from "./read.module.css";
+
+export default function DownloadManga({ chapterId: id }) {
+ return (
+ <div className={styles.DownloadMain}>
+ <a
+ href={`https://manga-downloader-7nca.onrender.com/download?id=${id}`}
+ style={{ textDecoration: "none" }}
+ onClick={() =>
+ alert(
+ "Downloads are not instant. It might take some time to prepare your file. Thank you for your patience"
+ )
+ }
+ >
+ <button title="should work just fine">Download - Beta</button>
+ </a>
+ </div>
+ );
+}
diff --git a/src/app/manga/[title]/[id]/[read]/page.jsx b/src/app/manga/[title]/[id]/[read]/page.jsx
index dbba6e0..a4181d7 100644
--- a/src/app/manga/[title]/[id]/[read]/page.jsx
+++ b/src/app/manga/[title]/[id]/[read]/page.jsx
@@ -1,56 +1,56 @@
-import styles from "./read.module.css";
-import Image from "next/image";
-import DownloadManga from "./download";
-
-export default async function Read({ params }) {
- const chapterId = params.read;
- const results = await getPages(chapterId);
- const image_base_url = results.baseUrl + "/data/" + results.chapter.hash;
-
- if (results.length === 0) {
- return (
- <div className={styles.NotFound}>
- <p>
- This chapter has no content. Please check the next chapter.
- </p>
- </div>
- );
- }
-
- let images = [];
- for (var i = 0; i < results.chapter.data.length; i++) {
- var imgUrl = image_base_url + "/" + results.chapter.data[i];
- images.push(imgUrl);
- }
-
- return (
- <div className={styles.Main}>
- <div className={styles.ImageContainer}>
- <DownloadManga chapterId={chapterId} />
- <p>Total pages: {images.length}</p>
- {images &&
- images.map((item, index) => (
- <div className={styles.Image} key={index}>
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item}`}
- key={index}
- alt="Pages"
- width={800}
- height={1000}
- priority
- quality={100}
- unoptimized
- />
- <p>{index + 1}</p>
- </div>
- ))}
- </div>
- </div>
- );
-}
-
-async function getPages(id) {
- const res = await fetch(`https://api.mangadex.org/at-home/server/${id}`);
- const data = await res.json();
- return data;
-}
+import styles from "./read.module.css";
+import Image from "next/image";
+import DownloadManga from "./download";
+
+export default async function Read({ params }) {
+ const chapterId = params.read;
+ const results = await getPages(chapterId);
+ const image_base_url = results.baseUrl + "/data/" + results.chapter.hash;
+
+ if (results.length === 0) {
+ return (
+ <div className={styles.NotFound}>
+ <p>
+ This chapter has no content. Please check the next chapter.
+ </p>
+ </div>
+ );
+ }
+
+ let images = [];
+ for (var i = 0; i < results.chapter.data.length; i++) {
+ var imgUrl = image_base_url + "/" + results.chapter.data[i];
+ images.push(imgUrl);
+ }
+
+ return (
+ <div className={styles.Main}>
+ <div className={styles.ImageContainer}>
+ <DownloadManga chapterId={chapterId} />
+ <p>Total pages: {images.length}</p>
+ {images &&
+ images.map((item, index) => (
+ <div className={styles.Image} key={index}>
+ <Image
+ src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item}`}
+ key={index}
+ alt="Pages"
+ width={800}
+ height={1000}
+ priority
+ quality={100}
+ unoptimized
+ />
+ <p>{index + 1}</p>
+ </div>
+ ))}
+ </div>
+ </div>
+ );
+}
+
+async function getPages(id) {
+ const res = await fetch(`https://api.mangadex.org/at-home/server/${id}`);
+ const data = await res.json();
+ return data;
+}
diff --git a/src/app/manga/[title]/[id]/[read]/read.module.css b/src/app/manga/[title]/[id]/[read]/read.module.css
index 420fff8..0133232 100644
--- a/src/app/manga/[title]/[id]/[read]/read.module.css
+++ b/src/app/manga/[title]/[id]/[read]/read.module.css
@@ -1,65 +1,65 @@
-.Main {
- margin: 80px auto;
-}
-
-.Image {
- display: flex;
- flex-direction: column;
- align-items: center;
- background-color: #1b1b1b;
- border-radius: 10px;
- width: 50%;
- margin: 10px auto;
-}
-
-.ImageContainer img {
- max-width: auto;
- height: auto;
- border-radius: 5px;
- margin-top: 10px;
-}
-
-.ImageContainer p {
- text-align: center;
- color: white;
- font-family: "Atkinson Hyperlegible", serif;
- font-size: 16px;
- margin: 5px;
-}
-
-.NotFound {
- text-align: center;
- color: white;
- font-family: "Atkinson Hyperlegible", serif;
- font-size: 20px;
-}
-
-.DownloadMain {
- text-align: center;
-}
-
-.DownloadMain button {
- border: none;
- outline: none;
- border-radius: 5px;
- padding: 5px;
- font-family: "Atkinson Hyperlegible", serif;
- font-size: 16px;
- background-color: var(--light-green);
- cursor: pointer;
-}
-
-.DownloadMain button:hover {
- background-color: var(--pastel-red);
-}
-
-@media screen and (max-width: 768px) {
- .ImageContainer img {
- width: 95%;
- align-items: center;
- }
-
- .Image {
- width: 100%;
- }
+.Main {
+ margin: 80px auto;
+}
+
+.Image {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background-color: #1b1b1b;
+ border-radius: 10px;
+ width: 50%;
+ margin: 10px auto;
+}
+
+.ImageContainer img {
+ max-width: auto;
+ height: auto;
+ border-radius: 5px;
+ margin-top: 10px;
+}
+
+.ImageContainer p {
+ text-align: center;
+ color: white;
+ font-family: "Atkinson Hyperlegible", serif;
+ font-size: 16px;
+ margin: 5px;
+}
+
+.NotFound {
+ text-align: center;
+ color: white;
+ font-family: "Atkinson Hyperlegible", serif;
+ font-size: 20px;
+}
+
+.DownloadMain {
+ text-align: center;
+}
+
+.DownloadMain button {
+ border: none;
+ outline: none;
+ border-radius: 5px;
+ padding: 5px;
+ font-family: "Atkinson Hyperlegible", serif;
+ font-size: 16px;
+ background-color: var(--light-green);
+ cursor: pointer;
+}
+
+.DownloadMain button:hover {
+ background-color: var(--pastel-red);
+}
+
+@media screen and (max-width: 768px) {
+ .ImageContainer img {
+ width: 95%;
+ align-items: center;
+ }
+
+ .Image {
+ width: 100%;
+ }
} \ No newline at end of file
diff --git a/src/app/manga/[title]/[id]/buttons.jsx b/src/app/manga/[title]/[id]/buttons.jsx
index 4c11705..a6c8d75 100644
--- a/src/app/manga/[title]/[id]/buttons.jsx
+++ b/src/app/manga/[title]/[id]/buttons.jsx
@@ -1,54 +1,54 @@
-"use client";
-
-import styles from "./info.module.css";
-import Link from "next/link";
-import { storeLocal } from "../../history/storeData";
-
-export default function Buttons({ content: data }) {
- function store_to_local(title, chapter, volume, image, id, id2) {
- let data = {
- title: title,
- chapter: chapter,
- volume: volume,
- image: image,
- id: id,
- mangaId: id2,
- };
- storeLocal(data);
- }
-
- return (
- <div className={styles.ChapterContainer}>
- {data.chapters &&
- data.chapters.map((item, index) => {
- if (item.pages !== 0) {
- return (
- <Link
- key={index}
- href={{
- pathname: `/manga/info/read/${item.id}`,
- }}
- onClick={() => {
- store_to_local(
- data.title.english || data.title.romaji,
- parseInt(item.chapterNumber),
- parseInt(item.volumeNumber),
- data.image,
- item.id,
- data.id
- );
- }}
- >
- <button key={index}>
- <div>
- <p>Chapter: {item.chapterNumber}</p>
- <p>Volume: {item.volumeNumber}</p>
- </div>
- </button>
- </Link>
- );
- }
- })}
- </div>
- );
-}
+"use client";
+
+import styles from "./info.module.css";
+import Link from "next/link";
+import { storeLocal } from "../../history/storeData";
+
+export default function Buttons({ content: data }) {
+ function store_to_local(title, chapter, volume, image, id, id2) {
+ let data = {
+ title: title,
+ chapter: chapter,
+ volume: volume,
+ image: image,
+ id: id,
+ mangaId: id2,
+ };
+ storeLocal(data);
+ }
+
+ return (
+ <div className={styles.ChapterContainer}>
+ {data.chapters &&
+ data.chapters.map((item, index) => {
+ if (item.pages !== 0) {
+ return (
+ <Link
+ key={index}
+ href={{
+ pathname: `/manga/info/read/${item.id}`,
+ }}
+ onClick={() => {
+ store_to_local(
+ data.title.english || data.title.romaji,
+ parseInt(item.chapterNumber),
+ parseInt(item.volumeNumber),
+ data.image,
+ item.id,
+ data.id
+ );
+ }}
+ >
+ <button key={index}>
+ <div>
+ <p>Chapter: {item.chapterNumber}</p>
+ <p>Volume: {item.volumeNumber}</p>
+ </div>
+ </button>
+ </Link>
+ );
+ }
+ })}
+ </div>
+ );
+}
diff --git a/src/app/manga/[title]/[id]/info.module.css b/src/app/manga/[title]/[id]/info.module.css
index b1b76f4..bc22f49 100644
--- a/src/app/manga/[title]/[id]/info.module.css
+++ b/src/app/manga/[title]/[id]/info.module.css
@@ -1,224 +1,224 @@
-.MangaInfoContainer {
- margin: 68px auto;
-}
-
-.MangaHero {
- display: flex;
- flex-direction: column;
- justify-content: center;
-}
-
-.TitleContainer {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 5px;
- background-color: #2c2c2c9c;
- backdrop-filter: blur(5px);
-
-}
-
-.TitleContainer p {
- font-family: "Lexend Deca", serif;
- font-size: 40px;
- font-weight: 1000;
-}
-
-.TitleContainer img {
- border-radius: 10px;
- margin-left: 5px;
-}
-
-.MangaDescription {
- color: white;
- font-family: "Atkinson Hyperlegible", serif;
- max-width: 98%;
- margin: -10px auto;
-}
-
-.Description h2 {
- font-family: "Lexend Deca", serif;
- color: gray;
-}
-
-.Description p {
- margin-top: -10px;
-}
-
-.MangaReleaseYear {
- margin-top: 10px;
- font-family: "Poppins", serif;
-}
-
-.GenreContainer {
- margin-top: 5px;
- display: flex;
- align-items: center;
- font-family: "Poppins", serif;
-}
-
-.GenreText {
- color: var(--neon-green);
-}
-
-.GenreContainer {
- margin-top: 10px;
-}
-
-.genres {
- display: flex;
- align-items: center;
- overflow-x: auto;
-}
-
-.MangaGenre {
- background-color: #5f5f5f5d;
- border-radius: 5px;
- padding: 2px 5px;
- cursor: pointer;
- margin: 2px;
-}
-
-.MangaRatings {
- display: flex;
- margin-top: 10px;
- font-family: "Poppins", serif;
- /* justify-content: center; */
-}
-
-.MangaRatings span {
- margin-right: 2px;
- margin-left: 2px;
- color: var(--light-green);
-}
-
-.CharactersContainer {
- max-width: 98%;
- margin: 20px auto;
-}
-
-.CharactersContainer h2 {
- color: gray;
- font-family: "Lexend Deca", serif;
-}
-
-.Character {
- display: flex;
- flex-direction: row;
- overflow-x: auto;
- margin-top: -10px;
-}
-
-.Character::-webkit-scrollbar {
- height: 5px;
-}
-
-.Character::-webkit-scrollbar-thumb {
- background-color: #31363F;
- border-radius: 5px;
-}
-
-.CharacterEntry {
- display: flex;
- flex-direction: column;
- align-items: center;
- width: auto;
- margin: 5px;
-}
-
-.CharacterEntry p {
- margin: 10px auto;
- text-align: center;
- width: 110px;
- color: white;
- font-family: "Atkinson Hyperlegible", serif;
-}
-
-.CharacterEntry img {
- border-radius: 10px;
-}
-
-/* Chapters Buttons */
-
-.Chapters {
- display: flex;
- align-items: center;
- justify-content: space-between;
- max-width: 90%;
- margin: 20px auto;
-}
-
-.ChapterTitle {
- color: white;
- font-family: "Lexend Deca", serif;
- font-size: 32px;
-}
-
-.ChapterContainer {
- width: 50dvw;
- text-align: center;
- height: 300px;
- overflow-y: auto;
-}
-
-.ChapterContainer::-webkit-scrollbar {
- width: 5px;
- height: 0px;
-}
-
-.ChapterContainer::-webkit-scrollbar-thumb {
- background-color: #31363F;
- border-radius: 5px;
-}
-
-.ChapterContainer button {
- width: 130px;
- height: auto;
- padding: 10px;
- margin: 5px;
- border-radius: 5px;
- font-size: 16px;
- border: none;
- outline: none;
- color: white;
- background-color: #3d3d3d;
- cursor: pointer;
- transition: background-color 100ms ease-in-out;
-}
-
-.ChapterContainer button p {
- font-family: "Atkinson Hyperlegible", serif;
- margin: 2px;
-}
-
-.ChapterContainer button:hover {
- background-color: #1f1f1f;
- transition: background-color 50ms ease-in
-}
-
-.ChapterContainer button:focus {
- opacity: 0.7;
- transition: transform 0.2s linear;
- background-color: var(--pastel-red);
- transform: scale(0.9);
-}
-
-@media screen and (max-width: 768px) {
- .MangaInfoContainer {
- max-width: 100%;
- }
-
- .TitleContainer p {
- font-size: 28px;
- }
-
- .ChapterContainer button {
- width: 120px;
-
- }
-
- .ChapterContainer button p {
- font-size: 14px;
- }
-
+.MangaInfoContainer {
+ margin: 68px auto;
+}
+
+.MangaHero {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+.TitleContainer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 5px;
+ background-color: #2c2c2c9c;
+ backdrop-filter: blur(5px);
+
+}
+
+.TitleContainer p {
+ font-family: "Lexend Deca", serif;
+ font-size: 40px;
+ font-weight: 1000;
+}
+
+.TitleContainer img {
+ border-radius: 10px;
+ margin-left: 5px;
+}
+
+.MangaDescription {
+ color: white;
+ font-family: "Atkinson Hyperlegible", serif;
+ max-width: 98%;
+ margin: -10px auto;
+}
+
+.Description h2 {
+ font-family: "Lexend Deca", serif;
+ color: gray;
+}
+
+.Description p {
+ margin-top: -10px;
+}
+
+.MangaReleaseYear {
+ margin-top: 10px;
+ font-family: "Poppins", serif;
+}
+
+.GenreContainer {
+ margin-top: 5px;
+ display: flex;
+ align-items: center;
+ font-family: "Poppins", serif;
+}
+
+.GenreText {
+ color: var(--neon-green);
+}
+
+.GenreContainer {
+ margin-top: 10px;
+}
+
+.genres {
+ display: flex;
+ align-items: center;
+ overflow-x: auto;
+}
+
+.MangaGenre {
+ background-color: #5f5f5f5d;
+ border-radius: 5px;
+ padding: 2px 5px;
+ cursor: pointer;
+ margin: 2px;
+}
+
+.MangaRatings {
+ display: flex;
+ margin-top: 10px;
+ font-family: "Poppins", serif;
+ /* justify-content: center; */
+}
+
+.MangaRatings span {
+ margin-right: 2px;
+ margin-left: 2px;
+ color: var(--light-green);
+}
+
+.CharactersContainer {
+ max-width: 98%;
+ margin: 20px auto;
+}
+
+.CharactersContainer h2 {
+ color: gray;
+ font-family: "Lexend Deca", serif;
+}
+
+.Character {
+ display: flex;
+ flex-direction: row;
+ overflow-x: auto;
+ margin-top: -10px;
+}
+
+.Character::-webkit-scrollbar {
+ height: 5px;
+}
+
+.Character::-webkit-scrollbar-thumb {
+ background-color: #31363F;
+ border-radius: 5px;
+}
+
+.CharacterEntry {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: auto;
+ margin: 5px;
+}
+
+.CharacterEntry p {
+ margin: 10px auto;
+ text-align: center;
+ width: 110px;
+ color: white;
+ font-family: "Atkinson Hyperlegible", serif;
+}
+
+.CharacterEntry img {
+ border-radius: 10px;
+}
+
+/* Chapters Buttons */
+
+.Chapters {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ max-width: 90%;
+ margin: 20px auto;
+}
+
+.ChapterTitle {
+ color: white;
+ font-family: "Lexend Deca", serif;
+ font-size: 32px;
+}
+
+.ChapterContainer {
+ width: 50dvw;
+ text-align: center;
+ height: 300px;
+ overflow-y: auto;
+}
+
+.ChapterContainer::-webkit-scrollbar {
+ width: 5px;
+ height: 0px;
+}
+
+.ChapterContainer::-webkit-scrollbar-thumb {
+ background-color: #31363F;
+ border-radius: 5px;
+}
+
+.ChapterContainer button {
+ width: 130px;
+ height: auto;
+ padding: 10px;
+ margin: 5px;
+ border-radius: 5px;
+ font-size: 16px;
+ border: none;
+ outline: none;
+ color: white;
+ background-color: #3d3d3d;
+ cursor: pointer;
+ transition: background-color 100ms ease-in-out;
+}
+
+.ChapterContainer button p {
+ font-family: "Atkinson Hyperlegible", serif;
+ margin: 2px;
+}
+
+.ChapterContainer button:hover {
+ background-color: #1f1f1f;
+ transition: background-color 50ms ease-in
+}
+
+.ChapterContainer button:focus {
+ opacity: 0.7;
+ transition: transform 0.2s linear;
+ background-color: var(--pastel-red);
+ transform: scale(0.9);
+}
+
+@media screen and (max-width: 768px) {
+ .MangaInfoContainer {
+ max-width: 100%;
+ }
+
+ .TitleContainer p {
+ font-size: 28px;
+ }
+
+ .ChapterContainer button {
+ width: 120px;
+
+ }
+
+ .ChapterContainer button p {
+ font-size: 14px;
+ }
+
} \ No newline at end of file
diff --git a/src/app/manga/[title]/[id]/page.jsx b/src/app/manga/[title]/[id]/page.jsx
index d743f4d..ffd962d 100644
--- a/src/app/manga/[title]/[id]/page.jsx
+++ b/src/app/manga/[title]/[id]/page.jsx
@@ -1,136 +1,136 @@
-import styles from "./info.module.css";
-import Image from "next/image";
-import Buttons from "./buttons";
-import { redirect } from "next/navigation";
-import { FaStar } from "react-icons/fa";
-import { PreFetchChaterLinks } from "../../cacher";
-
-export default async function MangaInfo({ params }) {
- const id = params.id;
- const data = await getMangaInfo(id);
-
- if (data.message) {
- redirect("/404");
- }
-
- PreFetchChaterLinks(data.chapters);
-
- return (
- <div className={styles.MangaInfoContainer}>
- {data && (
- <div className={styles.MangaInfo}>
- <div
- className={styles.MangaHero}
- style={{
- backgroundImage: `url(${data.cover})`,
- backgroundSize: "cover",
- backgroundRepeat: "no-repeat",
- borderRadius: 10,
- }}
- >
- <div className={styles.TitleContainer}>
- <p
- style={{
- color: data.color,
- borderRadius: 10,
- padding: 5,
- }}
- >
- {data.title["english"] || data.title["romaji"]}
- </p>
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${data.image}`}
- width={200}
- height={310}
- alt="Manga Poster"
- priority
- />
- </div>
- </div>
-
- <div className={styles.MangaDescription}>
- <div className={styles.Description}>
- <h2>Description</h2>
- <p>{data.description.split("<br")[0]}</p>
- </div>
-
- <div className={styles.MangaReleaseYear}>
- <span style={{ color: "#A3FFD6" }}>
- Started on: {data.startDate["day"]}-
- {data.startDate["month"]}-
- {data.startDate["year"]}
- </span>
- <span style={{ color: "white", margin: 10 }}>
- |
- </span>
- <span style={{ color: "var(--pastel-red)" }}>
- Ended on: {data.endDate["day"]}-
- {data.endDate["month"]}-{data.endDate["year"]}
- </span>
- </div>
-
- <div className={styles.GenreContainer}>
- <span className={styles.GenreText}>Genres: </span>
- <div className={styles.genres}>
- {data.genres &&
- data.genres.map((item, index) => (
- <span
- key={index}
- className={styles.MangaGenre}
- >
- {item}
- </span>
- ))}
- </div>
- </div>
-
- <div className={styles.MangaRatings}>
- <span>Ratings: {data.rating / 10}</span>
- <span>
- <FaStar />
- </span>
- </div>
- </div>
-
- <div className={styles.CharactersContainer}>
- <h2>Characters</h2>
- <div className={styles.Character}>
- {data.characters &&
- data.characters.map((item, index) => (
- <div
- key={index}
- className={styles.CharacterEntry}
- >
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
- width={140}
- height={200}
- alt="Character Poster"
- />
- <p>
- {item.name.full} ({item.role})
- </p>
- </div>
- ))}
- </div>
- </div>
- <div className={styles.Chapters}>
- <p className={styles.ChapterTitle}>
- Chapters & Volumes
- </p>
- <Buttons content={data} />
- </div>
- </div>
- )}
- </div>
- );
-}
-
-async function getMangaInfo(id) {
- const res = await fetch(
- `https://consumet-jade.vercel.app/meta/anilist-manga/info/${id}?provider=mangadex`,
- { next: { revalidate: 86400 } }
- );
- const data = await res.json();
- return data;
-}
+import styles from "./info.module.css";
+import Image from "next/image";
+import Buttons from "./buttons";
+import { redirect } from "next/navigation";
+import { FaStar } from "react-icons/fa";
+import { PreFetchChaterLinks } from "../../cacher";
+
+export default async function MangaInfo({ params }) {
+ const id = params.id;
+ const data = await getMangaInfo(id);
+
+ if (data.message) {
+ redirect("/404");
+ }
+
+ PreFetchChaterLinks(data.chapters);
+
+ return (
+ <div className={styles.MangaInfoContainer}>
+ {data && (
+ <div className={styles.MangaInfo}>
+ <div
+ className={styles.MangaHero}
+ style={{
+ backgroundImage: `url(${data.cover})`,
+ backgroundSize: "cover",
+ backgroundRepeat: "no-repeat",
+ borderRadius: 10,
+ }}
+ >
+ <div className={styles.TitleContainer}>
+ <p
+ style={{
+ color: data.color,
+ borderRadius: 10,
+ padding: 5,
+ }}
+ >
+ {data.title["english"] || data.title["romaji"]}
+ </p>
+ <Image
+ src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${data.image}`}
+ width={200}
+ height={310}
+ alt="Manga Poster"
+ priority
+ />
+ </div>
+ </div>
+
+ <div className={styles.MangaDescription}>
+ <div className={styles.Description}>
+ <h2>Description</h2>
+ <p>{data.description.split("<br")[0]}</p>
+ </div>
+
+ <div className={styles.MangaReleaseYear}>
+ <span style={{ color: "#A3FFD6" }}>
+ Started on: {data.startDate["day"]}-
+ {data.startDate["month"]}-
+ {data.startDate["year"]}
+ </span>
+ <span style={{ color: "white", margin: 10 }}>
+ |
+ </span>
+ <span style={{ color: "var(--pastel-red)" }}>
+ Ended on: {data.endDate["day"]}-
+ {data.endDate["month"]}-{data.endDate["year"]}
+ </span>
+ </div>
+
+ <div className={styles.GenreContainer}>
+ <span className={styles.GenreText}>Genres: </span>
+ <div className={styles.genres}>
+ {data.genres &&
+ data.genres.map((item, index) => (
+ <span
+ key={index}
+ className={styles.MangaGenre}
+ >
+ {item}
+ </span>
+ ))}
+ </div>
+ </div>
+
+ <div className={styles.MangaRatings}>
+ <span>Ratings: {data.rating / 10}</span>
+ <span>
+ <FaStar />
+ </span>
+ </div>
+ </div>
+
+ <div className={styles.CharactersContainer}>
+ <h2>Characters</h2>
+ <div className={styles.Character}>
+ {data.characters &&
+ data.characters.map((item, index) => (
+ <div
+ key={index}
+ className={styles.CharacterEntry}
+ >
+ <Image
+ src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
+ width={140}
+ height={200}
+ alt="Character Poster"
+ />
+ <p>
+ {item.name.full} ({item.role})
+ </p>
+ </div>
+ ))}
+ </div>
+ </div>
+ <div className={styles.Chapters}>
+ <p className={styles.ChapterTitle}>
+ Chapters & Volumes
+ </p>
+ <Buttons content={data} />
+ </div>
+ </div>
+ )}
+ </div>
+ );
+}
+
+async function getMangaInfo(id) {
+ const res = await fetch(
+ `https://consumet-jade.vercel.app/meta/anilist-manga/info/${id}?provider=mangadex`,
+ { next: { revalidate: 86400 } }
+ );
+ const data = await res.json();
+ return data;
+}